"OCTOBER"   AS SAVED ON DISK
0800              1           TTL "Listing One: Indexed Modes Ex."
0800              2  ;
0800              3  ;
0800              4  ;
0800              5  **********************************
0800              6  *                                *
0800              7  * Listing One:                   *
0800              8  * Indexed Addressing Modes       *
0800              9  * Example Program.               *
0800             10  *                                *
0800             11  **********************************
0800             12  ;
0800             13  ;
0800             14  ;
0800             15  *************
0800             16  * CONSTANTS *
0800             17  *************
0800             18  ;
0800             19  ;
0000             20  FALSE    EQU 0
0001             21  TRUE     EQU 1
008D             22  CR       EQU $8D
0800             23  ;
0800             24  ;
0800             25  ;
0800             26  ; "IF" STATEMENT EQUATES
0800             27  ;
0800             28  ;
00BD             29  EQ       EQU "="
00A3             30  NE       EQU "#"
00BE             31  GT       EQU ">"
00BC             32  LT       EQU "<"
BDBE             33  GE       EQU ">"|"="*256
BDBC             34  LE       EQU "<"|"="*256
0800             35  ;
0800             36  ;
0800             37  ;
0800             38  ;
0800             39  ;
0800             40  ;
0800             41  ;
0800             42  **************************
0800             43  * SPEED/ASM ENTRY POINTS *
0800             44  **************************
0800             45  ;
0800             46  ;
0800             47  ;
0800             48  ;
0800             49  ; NOTE: TOE EQUATE OF FUTC MUST
0800             50  ; BE (BANGED IF YOU RELOCATE
0800             51  ; SPEED/ASM TO SOME LOCATION
0800             52  ; OTHER THAN $7800
0800             53  ;
0800             54  ;
0800             55  ;
7800             56  PUTC     EQU $7800
7803             57  GETC     EQU PUTC+3
7806             58  SAGL     EQU GETC+3          ;FOR USE BY S/A ONLY- SEE DOC.
7809             59  SAPC     EQU SAGL+3          ; "   "   "  "   "     "  "
780C             60  HOME     EQU SAPC+3          ;HOME AND CLEAR
780F             61  READLN   EQU HOME+3
7812             62  INIT     EQU READLN+3
7815             63  FOR      EQU INIT+3
7818             64  FOR0     EQU FOR+3
781B             65  NEXT     EQU FOR0+3
781E             66  IFI      EQU NEXT+3
7821             67  IFI0     EQU IFI+3
7824             68  IFS      EQU IFI0+3
7827             69  IFS0     EQU IFS+3
782A             70  MOVE     EQU IFS0+3
782D             71  LOAD     EQU MOVE+3
7830             72  MOVS     EQU LOAD+3
7833             73  LDSTR    EQU MOVS+3
7836             74  PRINT    EQU LDSTR+3
7839             75  PRTSTR   EQU PRINT+3
783C             76  PRTINT   EQU PRTSTR+3
783F             77  RDSTR    EQU PRTINT+3
7842             78  RDINT    EQU RDSTR+3
0800             79  ;
7854             80  ABS      EQU RDINT+18
7857             81  NEG      EQU ABS+3
785A             82  MUL      EQU NEG+3
785D             83  DIV      EQU MUL+3
7860             84  MOD      EQU DIV+3
7863             85  RND      EQU MOD+3
7866             86  SUBSTR   EQU RND+3
7869             87  INDEX    EQU SUBSTR+3
786C             88  LENGTH   EQU INDEX+3
786F             89  CONCAT   EQU LENGTH+3
0800             90  ;
0800             91  ;
0800             92  ;
0800             93  ;
0800             94  ; Apple monitor equate
0800             95  ;
FF69             96  EXIT     EQU $FF69
0800             97  ;
0800             98  ********************************
0800             99  *
0800            100  *
0800            101  * Sample program for Assembly
0800            102  * Advantage Part six.
0800            103  *
0800            104  * Demonstration of the 6502
0800            105  * indexed addressing modes.
0800            106  *
0800            107  ********************************
0800            108  ;
0800            109  ;
0800 20 12 78   110  BEGIN    JSR INIT            ;Always call this first
0803            111  ;
0803 20 0C 78   112           JSR HOME
0806            113  ;
0806 20 36 78   114           JSR PRINT
0809 8D 8D 8D   115           BYT CR,CR,CR
080C D4 E8 E9   116           BYT "This program counts the number of",CR
080F F3 A0 F0 
0812 F2 EF E7 
0815 F2 E1 ED 
0818 A0 E3 EF 
081B F5 EE F4 
081E F3 A0 F4 
0821 E8 E5 A0 
0824 EE F5 ED 
0827 E2 E5 F2 
082A A0 EF E6 
082D 8D 
082E C1 EC F0   117           BYT "Alphabetic, Vowels, Numeric, and",CR
0831 E8 E1 E2 
0834 E5 F4 E9 
0837 E3 AC A0 
083A D6 EF F7 
083D E5 EC F3 
0840 AC A0 CE 
0843 F5 ED E5 
0846 F2 E9 E3 
0849 AC A0 E1 
084C EE E4 8D 
084F CE EF EE   118           BYT "Non-numeric characters found on an",CR
0852 AD EE F5 
0855 ED E5 F2 
0858 E9 E3 A0 
085B E3 E8 E1 
085E F2 E1 E3 
0861 F4 E5 F2 
0864 F3 A0 E6 
0867 EF F5 EE 
086A E4 A0 EF 
086D EE A0 E1 
0870 EE 8D 
0872 E9 EE F0   119           BYT "input line.",CR
0875 F5 F4 A0 
0878 EC E9 EE 
087B E5 AE 8D 
087E 8D         120           BYT CR
087F A0 A0 A0   121           BYT "   To terminate the program press"
0882 D4 EF A0 
0885 F4 E5 F2 
0888 ED E9 EE 
088B E1 F4 E5 
088E A0 F4 E8 
0891 E5 A0 F0 
0894 F2 EF E7 
0897 F2 E1 ED 
089A A0 F0 F2 
089D E5 F3 F3 
08A0 F3 F0 E1   122           BYT "space as the first character on",CR
08A3 E3 E5 A0 
08A6 E1 F3 A0 
08A9 F4 E8 E5 
08AC A0 E6 E9 
08AF F2 F3 F4 
08B2 A0 E3 E8 
08B5 E1 F2 E1 
08B8 E3 F4 E5 
08BB F2 A0 EF 
08BE EE 8D 
08C0 F4 E8 E5   123           BYT "the line.",CR,CR
08C3 A0 EC E9 
08C6 EE E5 AE 
08C9 8D 8D 
08CB 00         124           BYT 0
08CC            125  ;
08CC            126  ;
08CC 20 36 78   127  READLOOP JSR PRINT
08CF 8D C5 EE   128           BYT CR,"Enter a line of text: ",0
08D2 F4 E5 F2 
08D5 A0 E1 A0 
08D8 EC E9 EE 
08DB E5 A0 EF 
08DE E6 A0 F4 
08E1 E5 F8 F4 
08E4 BA A0 00 
08E7 20 0F 78   129           JSR READLN
08EA 20 3F 78   130           JSR RDSTR
08ED 23 0A      131           ADR INPUTSTR
08EF            132  ;
08EF            133  ; See if the first character is a space
08EF            134  ;
08EF AD 24 0A   135           LDA INPUTSTR+1
08F2 C9 A0      136           CMP #" "
08F4 D0 03      137           BNE NOEXIT
08F6 4C 69 FF   138           JMP EXIT
08F9            139  ;
08F9            140  ;
08F9            141  ; Now count the vowels, alphabetic^
08F9            142  ; numerics, and other chars*
08F9            143  ;
08F9 20 2D 78   144  NOEXIT   JSR LOAD
08FC 00 00 1B   145           ADR 0,VOWEL
08FF 0A 
0900 20 2D 78   146           JSR LOAD
0903 00 00 1D   147           ADR 0,ALPHAS
0906 0A 
0907 20 2D 78   148           JSR LOAD
090A 00 00 1F   149           ADR 0,NUMERICS
090D 0A 
090E 20 2D 78   150           JSR LOAD
0911 00 00 21   151           ADR 0,CHARS
0914 0A 
0915            152  ;
0915 A2 00      153           LDX #0
0917 BD 24 0A   154  CNTLOOP  LDA INPUTSTR+1,X    ; Get char.
091A D0 7F      155           BNE TSTALPHA
091C            156  ;
091C            157  ;
091C            158  ; If at the end of the line, print
091C            159  ; the data out*
091C            160  ;
091C 20 36 78   161           JSR PRINT
091F 8D 8D CE   162           BYT CR,CR,"Number of vowels: ",0
0922 F5 ED E2 
0925 E5 F2 A0 
0928 EF E6 A0 
092B F6 EF F7 
092E E5 EC F3 
0931 BA A0 00 
0934 20 3C 78   163           JSR PRTINT
0937 1B 0A      164           ADR VOWEL
0939            165  ;
0939 20 36 78   166           JSR PRINT
093C 8D CE F5   167           BYT CR,"Number of alphabetics: ",0
093F ED E2 E5 
0942 F2 A0 EF 
0945 E6 A0 E1 
0948 EC F0 E8 
094B E1 E2 E5 
094E F4 E9 E3 
0951 F3 BA A0 
0954 00 
0955 20 3C 78   168           JSR PRTINT
0958 1D 0A      169           ADR ALPHAS
095A            170  ;
095A 20 36 78   171           JSR PRINT
095D 8D CE F5   172           BYT CR,"Number of numerics: ",0
0960 ED E2 E5 
0963 F2 A0 EF 
0966 E6 A0 EE 
0969 F5 ED E5 
096C F2 E9 E3 
096F F3 BA A0 
0972 00 
0973 20 3C 78   173           JSR PRTINT
0976 1F 0A      174           ADR NUMERICS
0978            175  ;
0978 20 36 78   176           JSR PRINT
097B 8D CE F5   177           BYT CR,"Number of characters: ",0
097E ED E2 E5 
0981 F2 A0 EF 
0984 E6 A0 E3 
0987 E8 E1 F2 
098A E1 E3 F4 
098D E5 F2 F3 
0990 BA A0 00 
0993 20 3C 78   178           JSR PRTINT
0996 21 0A      179           ADR CHARS
0998 4C CC 08   180           JMP READLOOP
099B            181  ;
099B            182  ;
099B            183  ; First, count the alphabetic chars
099B            184  ;
099B C9 C1      185  TSTALPHA CMP #"A"
099D 90 1D      186           BLT NOTALPHA
099F C9 DB      187           CMP #"Z"+1
09A1 90 08      188           BLT ISALPHA
09A3 C9 E1      189           CMP #"a"
09A5 90 15      190           BLT NOTALPHA
09A7 C9 FB      191           CMP #"z"+1
09A9 B0 11      192           BGE NOTALPHA
09AB            193  ;
09AB 18         194  ISALPHA  CLC 
09AC A9 01      195           LDA #1
09AE 6D 1D 0A   196           ADC ALPHAS
09B1 8D 1D 0A   197           STA ALPHAS
09B4 A9 00      198           LDA /1
09B6 6D 1E 0A   199           ADC ALPHAS+1
09B9 8D 1E 0A   200           STA ALPHAS+1
09BC            201  ;
09BC            202  ;
09BC            203  ; Now count the vowels
09BC            204  ;
09BC BD 24 0A   205  NOTALPHA LDA INPUTSTR+1,X
09BF A0 0D      206           LDY #13
09C1 D9 0D 0A   207  VWLCMP   CMP VOWELS,Y
09C4 F0 05      208           BEQ ISAVWL
09C6 88         209           DEY 
09C7 10 F8      210           BPL VWLCMP
09C9 30 11      211           BMI NOTAVWL
09CB            212  ;
09CB 18         213  ISAVWL   CLC 
09CC A9 01      214           LDA #1
09CE 6D 1B 0A   215           ADC VOWEL
09D1 8D 1B 0A   216           STA VOWEL
09D4 A9 00      217           LDA /1
09D6 6D 1C 0A   218           ADC VOWEL+1
09D9 8D 1C 0A   219           STA VOWEL+1
09DC            220  ;
09DC            221  ;
09DC            222  ;
09DC            223  ; If numeric, increment that counter,
09DC            224  ;
09DC            225  ;
09DC BD 24 0A   226  NOTAVWL  LDA INPUTSTR+1,X
09DF C9 B0      227           CMP #"0"
09E1 90 15      228           BLT NOTANUM
09E3 C9 BA      229           CMP #"9"+1
09E5 B0 11      230           BGE NOTANUM
09E7            231  ;
09E7 18         232           CLC 
09E8 AD 1F 0A   233           LDA NUMERICS
09EB 69 01      234           ADC #1
09ED 8D 1F 0A   235           STA NUMERICS
09F0 AD 20 0A   236           LDA NUMERICS+1
09F3 69 00      237           ADC /1
09F5 8D 20 0A   238           STA NUMERICS+1
09F8            239  ;
09F8            240  ;
09F8            241  ;
09F8            242  ; Increment the character count
09F8            243  ;
09F8 18         244  NOTANUM  CLC 
09F9 AD 21 0A   245           LDA CHARS
09FC 69 01      246           ADC #1
09FE 8D 21 0A   247           STA CHARS
0A01 AD 22 0A   248           LDA CHARS+1
0A04 69 00      249           ADC /1
0A06 8D 22 0A   250           STA CHARS+1
0A09            251  ;
0A09            252  ; Move on to next character and repeat
0A09            253  ;
0A09 E8         254           INX 
0A0A 4C 17 09   255           JMP CNTLOOP
0A0D            256  ;
0A0D            257  ;
0A0D            258  ;
0A0D            259  ;
0A0D C1 C5 C9   260  VOWELS   BYT "AEIOUYWaeiouyw"
0A10 CF D5 D9 
0A13 D7 E1 E5 
0A16 E9 EF F5 
0A19 F9 F7 
0A1B            261  ;
0A1B            262  ;
0A1B 00 00      263  VOWEL    ADR 0
0A1D 00 00      264  ALPHAS   ADR 0
0A1F 00 00      265  NUMERICS ADR 0
0A21 00 00      266  CHARS    ADR 0
0A23            267  ;
0A23            268  ;
0A23 80 00      269  INPUTSTR ADR 128
0A25            270           DFS 128
0AA5            271  ;
0AA5            272           END